from camel.agents import TaskSpecifyAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, TaskType
from camel.prompts import AISocietyPromptTemplateDict, CodePromptTemplateDict
from camel.prompts import TextPrompt
import os
from dotenv import load_dotenv

load_dotenv()

# 从环境变量中获取 API Key
api_key = os.getenv('MODELSCOPE_SDK_TOKEN')
if not api_key:
    raise ValueError("环境变量 'MODELSCOPE_SDK_TOKEN' 未设置。请确保已设置该变量并重新运行程序。")

# 创建模型配置
model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="Qwen/Qwen2.5-72B-Instruct",
    url='https://api-inference.modelscope.cn/v1/',
    api_key=api_key
)

# 定义角色和任务
assistant_role = "编程培训专家"
user_role = "学生"
task_prompt = "帮助用户学习python编程语言，逐步生成学习计划，包括基本概念、代码示例和练习题"

# 生成语言和领域配置
generate_language = CodePromptTemplateDict.GENERATE_LANGUAGES.format(num_language="python")
task_specify_prompt = CodePromptTemplateDict.TASK_SPECIFY_PROMPT.format(
    domain="提供代码示例问题和答案"
)
generate_domains = CodePromptTemplateDict.GENERATE_DOMAINS.format(num_domains="python")

# 创建助手提示
assistant_prompt = CodePromptTemplateDict.TASK_SPECIFY_PROMPT.format(
    assistant_role=assistant_role,
    task=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500,
        generate_language=generate_language,
        task_specify_prompt=task_specify_prompt,
        generate_domains=generate_domains
    ),
)

# 初始化任务指定代理
task_specify_agent = TaskSpecifyAgent(
    model=model,
    task_specify_prompt=assistant_prompt,
    output_language='中文'
)

# 运行任务并获取结果
specified_task_prompt = task_specify_agent.run(
    task_prompt=task_prompt,
    meta_dict=dict(
        assistant_role=assistant_role,
        user_role=user_role,
        word_limit=500
    ),
)

print("编程培训顾问回答:", specified_task_prompt)